home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / modules / nessus-2.2.8.mo / usr / lib / nessus / plugins / bind_query.nasl < prev    next >
Text File  |  2005-01-14  |  3KB  |  147 lines

  1. #
  2. # This script was written by Noam Rathaus <noamr@securiteam.com>
  3. #
  4. # See the Nessus Scripts License for details
  5. #
  6.  
  7. if(description)
  8. {
  9.  script_id(10539);
  10.  script_bugtraq_id(136, 678);
  11.  script_cve_id("CVE-1999-0024");
  12.  script_version ("$Revision: 1.17 $");
  13.  name["english"] = "Useable remote name server";
  14.  script_name(english:name["english"]);
  15.  
  16.  desc["english"] = "
  17. The remote name server allows recursive queries to be performed
  18. by the host running nessusd.
  19.  
  20. If this is your internal nameserver, then forget this warning.
  21.  
  22. If you are probing a remote nameserver, then it allows anyone
  23. to use it to resolve third parties names (such as www.nessus.org).
  24. This allows hackers to do cache poisoning attacks against this
  25. nameserver.
  26.  
  27. If the host allows these recursive queries via UDP,
  28. then the host can be used to 'bounce' Denial of Service attacks
  29. against another network or system.
  30.  
  31. See also : http://www.cert.org/advisories/CA-1997-22.html
  32.  
  33. Solution : Restrict recursive queries to the hosts that should
  34. use this nameserver (such as those of the LAN connected to it).
  35.  
  36. If you are using bind 8, you can do this by using the instruction
  37. 'allow-recursion' in the 'options' section of your named.conf
  38.  
  39. If you are using bind 9, you can define a grouping of internal addresses
  40. using the 'acl' command
  41.  
  42. Then, within the options block, you can explicitly state:
  43. 'allow-recursion { hosts_defined_in_acl }'
  44.  
  45. For more info on Bind 9 administration (to include recursion), see: 
  46. http://www.nominum.com/content/documents/bind9arm.pdf
  47.  
  48. If you are using another name server, consult its documentation.
  49.  
  50. Risk factor : High";
  51.  
  52.  
  53.  
  54.  script_description(english:desc["english"]);
  55.  
  56.  summary["english"] = "Determines if the remote name server allows recursive queries";
  57.  script_summary(english:summary["english"]);
  58.  
  59.  script_category(ACT_GATHER_INFO);
  60.  
  61.  script_copyright(english:"This script is Copyright (C) 2000 Renaud Deraison");
  62.  family["english"] = "General";
  63.  script_family(english:family["english"]);
  64.  script_dependencie("smtp_settings.nasl");
  65.  
  66.  exit(0);
  67. }
  68.  
  69. #
  70. # We ask the nameserver to resolve www.<user_defined_domain>
  71. #
  72.  
  73.  
  74. host = "www";
  75. domain = get_kb_item("Settings/third_party_domain");
  76. if(!domain)domain = "nessus.org";
  77.  
  78. h_len = strlen(host) % 255;
  79.  
  80. req = string(raw_string(h_len), host);
  81.  
  82. while(domain)
  83. {
  84.  p = ereg_replace(string:domain,
  85.            pattern:"([^\.]*)\..*",
  86.           replace:"\1");
  87.  q = ereg_replace(string:domain,
  88.            pattern:"[^\.]*\.(.*)",
  89.           replace:"\1");
  90.  
  91.  len = strlen(p) % 255;
  92.  req = string(req, raw_string(len),  p);
  93.  if(p == domain)domain = "";
  94.  else domain = q;                  
  95. }
  96.  
  97.  
  98. req = raw_string(0xEF, 0xB3, 0x01, 0x00, 0x00, 0x01,
  99.     0x00, 0x00, 0x00, 0x00, 0x00, 0x00) + req + raw_string( 0x00, 0x00, 0x01,
  100.     0x00, 0x01);
  101.     
  102.  
  103.  
  104.  
  105. soc = 0;
  106.  
  107. #
  108. # We first try to do this by TCP, then by UDP 
  109. #
  110. if(get_port_state(53))
  111. {
  112.  soc = open_sock_tcp(53);
  113.  offset = 2;
  114. }
  115.  
  116. if(!soc)
  117. {
  118.  if(!get_udp_port_state(53))exit(0);
  119.  soc = open_sock_udp(53);
  120.  offset = 0;
  121. }
  122.  
  123. if(soc)
  124. {
  125.  if(offset)
  126.  {
  127.   len = strlen(req);
  128.   req = raw_string(len/255, len%255) + req;
  129.  }
  130.  send(socket:soc, data:req);
  131.  r  = recv(socket:soc, length:4096);
  132.  close(soc);
  133.  if(r)
  134.  {
  135.   #
  136.   # We look at the flags of the remote DNS (we want 0x80 - "server
  137.   # can do recursive queries")
  138.   #
  139.   if((ord(r[3+offset]) & 0x80) && (ord(r[3+offset]) & 5 == 0)){
  140.       if(offset)
  141.            security_warning(port:53, protocol:"tcp");
  142.      else
  143.         security_warning(port:53, protocol:"udp");
  144.     }
  145.  }
  146. }
  147.